---
title: Getting started
hide_title: true
---

import TierLabel from "./../_components/TierLabel";
import AlphaWarning from "../_components/_alpha_warning.mdx";

# Getting started with Pipelines <TierLabel tiers="Enterprise" />

<AlphaWarning/>

## Prerequisites
Before using Pipelines, please ensure that:
- You have Weave GitOps Enterprise installed on a cluster.
- You have configured Weave GitOps Enterprise [RBAC for Pipelines](../authorization).
- The Pipelines feature flag `enablePipelines` has been enabled. This flag is part of the Weave GitOps Enterprise Helm chart values and is enabled by default.
- Any leaf clusters that are running workloads that you need to visualise using Pipelines, have been added to Weave GitOps Enterprise.
- You have [exposed the promotion webhook ](../promoting-applications/#expose-the-promotion-webhook) on the management cluster and leaf clusters can reach that webhook endpoint over the network.

## Define a pipeline

A pipeline allows you to define the route your application is taking in order to make it to production.
There are three main concepts playing in a pipeline:
- the `application` to deliver
- the `environments` that your app will go through in its way to production (general)
- the `deployment targets` or the clusters that each environment has

You can define a delivery pipeline using a `Pipeline` custom resource.
An example of how it looks for an application `podinfo` is shown below.

<details>
<summary>Expand to view</summary>

```yaml
---
apiVersion: pipelines.weave.works/v1alpha1
kind: Pipeline
metadata:
  name: podinfo-02
  namespace: flux-system
spec:
  appRef:
    apiVersion: helm.toolkit.fluxcd.io/v2beta1
    kind: HelmRelease
    name: podinfo
  environments:
    - name: dev
      targets:
        - namespace: podinfo-02-dev
          clusterRef:
            kind: GitopsCluster
            name: dev
            namespace: flux-system
    - name: test
      targets:
        - namespace: podinfo-02-qa
          clusterRef:
            kind: GitopsCluster
            name: dev
            namespace: flux-system
        - namespace: podinfo-02-perf
          clusterRef:
            kind: GitopsCluster
            name: dev
            namespace: flux-system
    - name: prod
      targets:
        - namespace: podinfo-02-prod
          clusterRef:
            kind: GitopsCluster
            name: prod
            namespace: flux-system
```

</details>

In the example above, the `podinfo` application is delivered to a traditional pipeline composed of `dev`, `test` and `prod` environments. 
An environment is used to describe the different stages of a pipeline and is composed of one or more deployment targets. A deployment 
target is a combination of a namespace and a [`GitopsCluster` reference](../../cluster-management/managing-existing-clusters/) and is 
used to specify where the application is running in our fleet. In this case, the `test` environment is composed of two deployment targets, 
`qa` and `perf`, to indicate that although both targets are part of the same stage (testing), they can evolve separately and may run 
different versions of the application. Note, that there are two clusters being used for the environments, `dev` and `prod`, both of which 
are defined in the `flux-system` namespace.

For more details about the spec of a pipeline [see here](spec/v1alpha1/pipeline.mdx).

## View the list of pipelines

Once flux has reconciled your pipeline you can navigate to the pipelines view to see it.

![view pipelines](img/view-pipelines.png)

Pipeline list view show the list of pipelines you have access to. For each pipeline, a simplified view of the pipeline
is shown with the application `Type` and `Environments` it goes through.

## View the details of a pipeline

Once you have selected a pipeline from the list, you will navigate to its details view.
In pipeline details view you could view the current status of your application by environment and deployment
target.

![view pipeline details](img/view-pipeline-details.png)

